# -*- coding: utf-8 -*-
import requests
import json
import logging
from typing import Any, Dict, List, Text, Optional

logger = logging.getLogger(__name__)
import jaydebeapi


class DoctorAPI:
    """Class to connect to the Rasa X API"""

    def __init__(self ):
        # JDBC连接参数
        jdbc_url = "jdbc:esproc:local://?config=/home/softrobot/fabric/raqsoftConfig.xml"  # 根据你的数据库类型和设置更改此URL
        driver_name = "com.esproc.jdbc.InternalDriver"  # 这是MySQL的JDBC驱动类名，其他数据库可能不同


        # JDBC驱动的jar文件路径（如果需要）
        # 注意：对于某些数据库，你可能需要提供JDBC驱动的jar文件路径。例如，对于MySQL，通常不需要，但对于其他数据库可能需要。
        jar_path = ['/home/softrobot/webapps/ROOT/BOOT-INF/lib/esproc-bin.jar',
                    '/home/softrobot/fabric/common/jdbc/mysql-connector-java-8.0.11.jar']  # 如果不需要，保持为None
        # 创建JDBC连接参数
        self.jdbc_params = {
            "driver": driver_name,
            "url": jdbc_url,
            "jar": jar_path  # 指定jar包路径
        }


    def predict(self, fun, msg):
        # 使用jaydebeapi建立连接并执行SQL查询
        connection = jaydebeapi.connect(self.jdbc_params['driver'],self.jdbc_params['url'],['',''],self.jdbc_params['jar'])
        cursor = connection.cursor()  # 获取游标对象用于执行SQL命令

        # 执行SQL查询（这里只是一个示例，根据你的需求更改SQL语句）
        # sql_query = f'call robot_doctor("{msg}")'  # 替换为你的SQL查询语句
        sql_query = f'call {fun}("{msg}")'  # 替换为你的SQL查询语句
        sql_query = "{"+ sql_query+"}"
        print(sql_query)
        cursor.execute(sql_query)
        data = cursor.fetchall()[0]
        data = data[0]
        # 处理查询结果（这里只是打印结果，你可以根据需要进行处理）
        # print(ret)

        # 关闭连接和游标
        cursor.close()
        connection.close()

        ret = ''
        jn = json.loads(data)
        for obj in jn['list']:
            ret += '<br/>推荐:<br/>'
            ret += obj['title']
            ret += obj['introduction']
            ret += obj['auditDoctor']['clinicProfessional']
            ret += obj['auditDoctor']['institutionName']

        return ret

    def ragchat(self,  msg):
        # 使用jaydebeapi建立连接并执行SQL查询
        connection = jaydebeapi.connect(self.jdbc_params['driver'],self.jdbc_params['url'],['',''],self.jdbc_params['jar'])
        cursor = connection.cursor()  # 获取游标对象用于执行SQL命令

        # 执行SQL查询（这里只是一个示例，根据你的需求更改SQL语句）
        # sql_query = f'call robot_doctor("{msg}")'  # 替换为你的SQL查询语句
        sql_query = f'call rag_chat("{msg}")'  # 替换为你的SQL查询语句
        sql_query = "{"+ sql_query+"}"
        print(sql_query)
        cursor.execute(sql_query)
        data = cursor.fetchall()[0]
        data = data[0]
        # 处理查询结果（这里只是打印结果，你可以根据需要进行处理）
        # print(ret)

        # 关闭连接和游标
        cursor.close()
        connection.close()

        ret = data
        return ret
doctor = DoctorAPI()
# ret = doctor.predict('robot_doctor','头孢')
# print(ret)